package com.qf.common.util;

import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;

/**
 * 密码加密、解密（salt+md5）
 */
@Component
public class PasswordUtils {
    /**
     * 把原密码加密用随机数的方式得到盐值,再进行MD5特殊加密
     *
     * @param password 原密码
     * @return 加密后的密码
     */
    public String encrypt(String password) {
        String salt = IdGen.uuid();
        return encrypt(salt, password);
    }

    /**
     * 用盐值与原密码进行MD5特殊加密
     *
     * @param salt     盐值
     * @param password 原密码
     * @return 加密后的密码
     */

    public String encrypt(String salt, String password) {
        //二层保护(密码加盐)，再用MD5加密
        String saltMd5Password = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return salt + "$" + saltMd5Password;
    }

    /**
     * 验证用户密码是否与加密的密码一样
     *
     * @param password        需要验证的密码
     * @param saltMd5Password 加密后的密码
     * @return true 成功     false 失败
     */
    public boolean verify(String password, String saltMd5Password) {
        //将加密后的密码根据特殊规则解析获得盐值，再将盐值与需要验证的密码进行特殊处理并判断是否一样
        String salt = saltMd5Password.split("\\$")[0];
        return encrypt(salt, password).equals(saltMd5Password);
    }
}
